import Stack from '../data-structures/stack.js'

export function parenthesesChecker(symbols) {
  const stack = new Stack()
  const opens = '([{'
  const closers = ')]}'
  let balanced = true
  let index = 0
  let symbol
  let top

  while (index < symbols.length && balanced) {
    symbol = symbols[index]
    if (opens.indexOf(symbol) >= 0) {
      stack.push(symbol)
    } else if (stack.isEmpty()) {
      balanced = false
    } else {
      top = stack.pop()
      if (!(opens.indexOf(top) === closers.indexOf(symbol))) {
        balanced = false
      }
    }
    index++
  }
  return balanced && stack.isEmpty()
}
